package Thread;

//线程等待(不带参数的join方法,只要不执行完,就会持续阻塞)
public class Demo14 {
    public static void main(String[] args) {
        //主线程里面创建t线程
        Thread t = new Thread(()->{
           for(int i =0;i < 3;i ++){
               System.out.println("这是线程t");
               try{
                   Thread.sleep(1000);
               }catch (InterruptedException e){
                   throw new RuntimeException(e);
               }
           }
            System.out.println("线程t结束");
        });

        t.start();

        try {
            Thread.sleep(4000);//这里可以确保t线程执行完之后才会执行main线程,此时join并没有发生阻塞,t线程已经结束了
            //join就是确保被等待的线程能够先结束,如果已经结束了,join就不必再等待了
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        //任何的线程之间,都是可以相互等待的,不是说必须得main线程等待别人,线程等待,也不一定是两个线程之间
        //一个线程,可以同时等待多个别的线程,或者若干线程之间也能相互等待

        //主线程等待t线程
        System.out.println("main线程开始等待");
        try {
            t.join();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println("main线程等待结束");
        //当t线程执行结束,此时join才会返回,main才会继续执行
    }
}
